package cn.zhfeat.utils.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;

import java.util.List;

public class RedisStringUtil {

//	private static Jedis jedis = null;
	/**
	 * 给数据库中名称为key的string赋予值value
	 * @param key
	 * @param value
	 */
	public static void setData(String key,String value){
	    Jedis jedis = RedisUtil.getJedisObject();
		jedis.set(key, value);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	public static void setData(byte[] key,byte[] value){
	    Jedis jedis = RedisUtil.getJedisObject();
		jedis.set(key, value);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	
	public static void deleteData(byte[] key){
		Jedis jedis = RedisUtil.getJedisObject();
		jedis.del(key);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	/**
	 * 返回数据库中名称为key的string的value
	 * @param key
	 */
	public static String getValue(String key){
	    Jedis jedis = RedisUtil.getJedisObject();
		String value=jedis.get(key);
		RedisUtil.recycleJedisOjbect(jedis);
		return value;
	}
	
	public static byte[] getValue(byte[] key){
	    Jedis jedis = RedisUtil.getJedisObject();
	    byte[] value=jedis.get(key);
		RedisUtil.recycleJedisOjbect(jedis);
		return value;
	}
	/**
	 * 给名称为key的string赋予上一次的value
	 * @param key
	 * @param value
	 */
	public static String getset(String key,String value){
	    Jedis jedis = RedisUtil.getJedisObject();
		String result=jedis.getSet(key, value);
		RedisUtil.recycleJedisOjbect(jedis);
		return result;
	}
	/**
	 * 同时插入多个数据 格式为 [key1，value1，key2，value2]
	 * 
	 * @param datas
	 */
	public static void  setdatas(String[] datas){
	    Jedis jedis = RedisUtil.getJedisObject();
		jedis.mset(datas);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	/**
	 * 返回多个value
	 * 
	 * @param keys key集合
	 */
	public static List<String> getValues(String[] keys){
	    Jedis jedis = RedisUtil.getJedisObject();
		List<String> values=jedis.mget(keys);
		RedisUtil.recycleJedisOjbect(jedis);
		return values;
	}
	/**
	 * 如果不存在名称为key的string，则向库中添加string，名称为key，值为value
	 * @param key
	 * @param value
	 */
	public static void setnx(String key,String value){
	    Jedis jedis = RedisUtil.getJedisObject();
		jedis.setnx(key, value);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	/**
	 * 如果所有的key都不存在 那么插入数据
	 * @param datas
	 */
	public static void msetnx(String[] datas){
	    Jedis jedis = RedisUtil.getJedisObject();
		jedis.msetnx(datas);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	
	/**
	 * 向库中添加string（名称为key，值为value）同时，设定过期时间time
	 * 
	 * @param key 
	 * @param time 过期时间
	 * @param value
	 */
	public static void setDataExpire(String key,int time,String value){
	    Jedis jedis = RedisUtil.getJedisObject();
		jedis.setex(key,time,value);
		RedisUtil.recycleJedisOjbect(jedis);
	}
	/**
	 * 名称为key的string增1操作
	 * @param key
	 */
    public static void increaseOne(String key){
        Jedis jedis = RedisUtil.getJedisObject();
		jedis.incr(key);
		RedisUtil.recycleJedisOjbect(jedis);
    }
    /**
     * 名称为key的string增加number
     * @param key
     * @param number 减少的值
     */
    public static void increase(String key,long number){
        Jedis jedis = RedisUtil.getJedisObject();
		jedis.incrBy(key, number);
		RedisUtil.recycleJedisOjbect(jedis);
    }
    /**
     * 名称为key的string减1操作
     */
    public static void decreaseOne(String key){
        Jedis jedis = RedisUtil.getJedisObject();
        jedis.decr(key);
    	RedisUtil.recycleJedisOjbect(jedis);
    }
    /**
     * 名称为key的string减少number
     * @param key
     * @param key
     * @param number
     */
    public static void decrease(String key,long number){
        Jedis jedis = RedisUtil.getJedisObject();
        jedis.decrBy(key,number);
    	RedisUtil.recycleJedisOjbect(jedis);
    }
    /**
     * 名称为key的string的值附加value
     * @param key
     * @param value
     */
    public static void append(String key,String value){
        Jedis jedis = RedisUtil.getJedisObject();
        jedis.append(key,value);
    	RedisUtil.recycleJedisOjbect(jedis);
    	
    }
    /**
     * 插入大量数据
     * 
     */
    public static void setLargeData(List<RedisModel> data){
        Jedis jedis = RedisUtil.getJedisObject();
		Pipeline pipeline = jedis.pipelined();
		RedisModel model = null;
		for (int i = 0; i < data.size(); i++) {
			model = data.get(i);
			pipeline.set(model.getKey(), model.getValue());
		}
		pipeline.sync();
		RedisUtil.recycleJedisOjbect(jedis);
    }
    
    public static void main(String[] args) throws InterruptedException{
//    	setData("123456789", "fuck");
//    	System.out.println(getValue("123456789"));
//    	RedisValueUtil.setExpire("123456789", 5);
//    	Thread.sleep(5000);
//    	System.out.println(getValue("123456789"));
    	
    	String[] datas=new String[]{"123","kang1","1234","kang2","12345","kang3"};
    	setdatas(datas);
    	String[] keys=new String[]{"123","1234","12345"};
    	System.out.println(getValues(keys));
    }
	
}
